// src/js/admin/course.js
import { ref, computed, reactive } from 'vue';
import "jbecool/jbecool.uniapp.min.js";
import VMControl from '@/js/VMControl';

const C = new VMControl('OBEvolutionAI.CourseControl', 'courseId');

// 课程数据列表
C.courses = ref([]);

// 根据搜索关键词过滤课程列表
C.filteredCourses = computed(() => {
    if (!C.searchKeyword.value) {
        return C.courses.value;
    }
    return C.courses.value.filter(course =>
        course.name.toLowerCase().includes(C.searchKeyword.value.toLowerCase()) ||
        (course.desc && course.desc.toLowerCase().includes(C.searchKeyword.value.toLowerCase()))
    );
});

// 添加课程
C.handleAddCourse = () => {
    // 获取当前登录用户信息
    const userInfo = uni.getStorageSync('userInfo');
    let createrId = 1; // 默认创建者ID
    let robotUserId = 1; // 默认机器人用户ID
    let user = null;
    if (userInfo) {
        try {
            user = JSON.parse(userInfo);
            createrId = user.userId || 1;
            robotUserId = user.userId || 1;
        } catch (e) {
            console.error('解析用户信息失败:', e);
        }
    }
    
    // 设置默认值
    C.rawModel.createrId = createrId;
    C.rawModel.robotUserId = robotUserId;
    C.rawModel.logo = ''; // 确保 logo 字段存在
    
    // 调用父类的 handleAdd 方法
    C.handleAdd();
    
    // 确保 fileList 结构正确初始化
    if (!C.fileList[-1]) {
        C.fileList[-1] = {};
    }
    if (!C.fileList[-1].logo) {
        C.fileList[-1].logo = { value: [] };
    }
};

// 编辑课程
C.handleEditCourse = (course) => {
    // 创建一个不包含creater字段的副本
    const { creater, ...courseWithoutCreater } = course;
    
    // 确保 fileList 结构正确初始化
    const courseId = courseWithoutCreater.courseId;
    if (!C.fileList[courseId]) {
        C.fileList[courseId] = {};
    }
    if (!C.fileList[courseId].logo) {
        C.fileList[courseId].logo = { value: [] };
    }
    
    // 使用 VMControl 的方法设置当前模型
    C.setCurrentModel(courseWithoutCreater);
    C.handleEdit();
};

// 删除课程 - 重写父类的删除方法以提供更具体的提示信息
C.handleDelete = function() {
    this.closeMenu();
    const id = this.currentModel[this.pk];
    uni.showModal({
        title: '确认删除',
        content: `确定要删除课程 "${this.currentModel.name}" 吗？`,
        success: async (res) => {
            if (res.confirm) {
                const index = this.courses.value.findIndex(c => c.courseId === id);
                if (index !== -1) {
                    const im = await J.callApiAsync(
                        `${this.apiPrefix}.delete_by_id`, { id: id });
                    if (im.success) {
                        this.courses.value.splice(index, 1);
                        uni.showToast({ title: '删除成功', icon: 'success' });
                    } else {
                        console.error('删除失败:', im);
                        uni.showToast({ title: '删除失败: ' + im.msg, icon: 'none' });
                    }
                }
            }
        }
    });
};

// 删除课程的公开方法
C.handleDeleteCourse = (course) => {
    C.handleDeleteModel(course);
};

// 提交表单（添加或编辑）
C.handleSubmitCourse = async () => {
    if (!C.currentModel.name.trim()) {
        uni.showToast({ title: '请输入课程名称', icon: 'none' });
        return;
    }
    
    // 获取当前登录用户信息
    const userInfo = uni.getStorageSync('userInfo');
    let createrId = 1; // 默认创建者ID
    let robotUserId = 1; // 默认机器人用户ID
    let user = null;
    if (userInfo) {
        try {
            user = JSON.parse(userInfo);
            createrId = user.userId || 1;
            robotUserId = user.userId || 1;
        } catch (e) {
            console.error('解析用户信息失败:', e);
        }
    }
    
    // 确保必需字段有默认值
    if (!C.currentModel.robotUserId) {
        C.currentModel.robotUserId = robotUserId;
    }
    
    // 处理logo字段 - 确保正确设置
    const courseId = C.currentModel.courseId || -1;
    if (C.fileList[courseId] && 
        C.fileList[courseId].logo && 
        C.fileList[courseId].logo.value.length > 0) {
        // 从上传的文件中获取文件名
        const fileUrls = C.fileList[courseId].logo.value.map(file => 
            file.url.split('filename=')[1] || file.url
        );
        C.currentModel.logo = fileUrls[0]; // 只取第一个文件
    } else if (C.currentModel.logo && C.currentModel.logo.startsWith('http')) {
        // 如果logo是完整URL，提取文件名部分
        const urlParts = C.currentModel.logo.split('filename=');
        if (urlParts.length > 1) {
            C.currentModel.logo = urlParts[1];
        }
    }
    
    if (C.modalMode.value === 'add') {
        // 设置创建者ID
        C.currentModel.createrId = createrId;
        
        const im = await J.callApiAsync(
            "OBEvolutionAI.CourseControl.add", 
            { model: { ...C.currentModel } }
        );
        
        if (im.success) {
            // 获取创建者信息并添加到返回的数据中
            const newCourse = im.data;
            newCourse.creater = {
                userId: createrId,
                username: (user && user.username) || '未知用户',
                name: (user && (user.name || user.username)) || '未知用户'
            };
            C.courses.value.push(newCourse);
            uni.showToast({ title: '添加成功', icon: 'success' });
            C.closePopup();
        } else {
            console.error('添加失败:', im);
            uni.showToast({ title: '添加失败: ' + im.msg, icon: 'none' });
        }
    } else {
        // 对于更新操作，我们需要移除creater字段
        const { creater, ...courseToUpdate } = C.currentModel;
        
        const im = await J.callApiAsync(
            "OBEvolutionAI.CourseControl.update_by_id", {
                id: C.currentModel.courseId,
                model: {
                    ...courseToUpdate,
                    robotUserId: courseToUpdate.robotUserId || robotUserId
                }
            }
        );
        
        if (im.success) {
            const index = C.courses.value.findIndex(c => c.courseId === C.currentModel.courseId);
            if (index !== -1) {
                // 更新成功后，保持原有的creater信息
                C.courses.value[index] = { ...C.currentModel, creater: C.courses.value[index].creater };
            }
            uni.showToast({ title: '更新成功', icon: 'success' });
            C.closePopup();
        } else {
            console.error('更新失败:', im);
            uni.showToast({ title: '更新失败: ' + im.msg, icon: 'none' });
        }
    }
};

// 重写 handleSubmit 方法以使用我们的自定义方法
C.handleSubmit = C.handleSubmitCourse;

// 在 course.js 的 loadCourses 方法中确保正确处理文件字段
C.loadCourses = async () => {
    const res = await J.callApiAsync("OBEvolutionAI.CourseControl.get_list_with_creator", {});
    if (res.success) {
        C.courses.value = res.data;
        C.initFileList(['logo']);
        C.filteredModels.value = C.courses.value;
    } else {
        console.error('加载课程数据失败:', res);
        C.courses.value = [];
        uni.showToast({ title: '加载数据失败', icon: 'none' });
    }
};

// 格式化文件URL的辅助方法
C.formatFileUrl = (filename) => {
    // 检查filename是否存在
    if (!filename) return '';
    
    // 如果已经是完整URL，直接返回
    if (filename.startsWith('http')) {
        return filename;
    }
    
    // 确保J对象和相关方法存在
    try {
        if (typeof J !== 'undefined' && 
            typeof J.formatFileUrl === 'function' && 
            typeof J.uck !== 'undefined' && 
            typeof J.uck.get === 'function') {
            return J.formatFileUrl(filename);
        } else {
            // 如果J.formatFileUrl不可用，使用备用方法
            const userId = (typeof J !== 'undefined' && J.uck) ? J.uck.get("userId") || "1" : "1";
            return `http://127.0.0.1:8089/__api__?type=user&user_id=${userId}&filename=${filename}`;
        }
    } catch (e) {
        console.warn('格式化文件URL时出错，使用默认方法:', e);
        // 出错时使用默认方法
        return `${J && J.api && J.api.apiUrl ? J.api.apiUrl : 'http://localhost:8089/__api__'}?filename=${filename}`;
    }
};

export default C;